package carson.web.mvc;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 表示一个用于将二进制文件内容发送到响应的基类
 *
 * @author Carson Chen
 */
public abstract class AbstractFileResult extends AbstractResult {

    /**
     * 实例化AbstractFileResult
     *
     * @param contentType 内容类型
     */
    protected AbstractFileResult(String contentType) {
        this.contentType = contentType;
    }

    private String contentType;

    private String fileDownloadName;

    /**
     * 获取用于响应的内容类型
     *
     * @return 内容类型 content type
     */
    public String getContentType() {
        return contentType;
    }

    /**
     * 获取文件下载时的文件名
     *
     * @return 文件下载时的文件名 file download name
     */
    public String getFileDownloadName() {
        return fileDownloadName;
    }

    /**
     * 设置文件下载时的文件名
     *
     * @param fileDownloadName 文件下载时的文件名
     */
    public void setFileDownloadName(String fileDownloadName) {
        this.fileDownloadName = fileDownloadName;
    }

    @Override
    public void executeResult(HttpServletRequest request, HttpServletResponse response) {
        try {
            this.writeFile(response);
        } catch (IOException ex) {

        }
    }

    /**
     * 提供给子类实现将二进制文件内容发送到响应
     *
     * @param response 响应对象
     * @throws IOException the io exception
     */
    protected abstract void writeFile(HttpServletResponse response) throws IOException;
}
